package com.ilas.dao;

import com.ilas.entity.BizUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 注册用户(BizUser)表数据库访问层
 *
 * @author bob
 * @since 2020-09-19 17:31:20
 */
public interface BizUserDao {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    BizUser queryById(Long id);

    /**
     * 查询指定行数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<BizUser> queryAllByLimit(@Param("offset") int offset, @Param("limit") int limit);

    /**
     * 根据条件查询数据
     *
     * @param param 查询条件
     * @return 对象列表
     */
    List<BizUser> queryAllByParam(BizUser param);


    /**
     * 通过实体作为筛选条件查询
     *
     * @param bizUser 实例对象
     * @return 对象列表
     */
    List<BizUser> queryAll(BizUser bizUser);

    /**
     * 通过用户id集合作为筛选条件查询
     *
     * @param userIds 用户id集合
     * @return 对象列表
     */
    List<BizUser> queryByUserIds(@Param("userIds") List<String> userIds);

    /**
     * 新增数据
     *
     * @param bizUser 实例对象
     * @return 影响行数
     */
    int insert(BizUser bizUser);

    /**
     * 修改数据
     *
     * @param bizUser 实例对象
     * @return 影响行数
     */
    int update(BizUser bizUser);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 影响行数
     */
    int deleteById(Long id);

    /**
     * 通过用户名查询用户
     *
     * @param code 用户名
     * @return BizUser
     */
    BizUser selectByName(String code);

    /**
     * 通过手机号查询用户
     *
     * @param phone 手机号
     * @return BizUser
     */
    BizUser selectByPhone(String phone);

    /**
     * 通过openid查询用户信息
     *
     * @param openid 小程序用户openid
     * @return 结果
     */
    BizUser getUserByOpenId(String openid);

    /**
     * 校验用户名称是否唯一
     *
     * @param code 用户名
     * @return 结果
     */
    BizUser checkUserNameUnique(String code);

    /**
     * 校验手机号码是否唯一
     *
     * @param phone 手机号码
     * @return 结果
     */
    BizUser checkPhoneUnique(String phone);

    /**
     * 校验email是否唯一
     *
     * @param email 用户邮箱
     * @return 结果
     */
    BizUser checkEmailUnique(String email);

    /**
     * 校验openid是否唯一
     *
     * @param openid 微信用户id
     * @return 结果
     */
    BizUser checkOpenidUnique(String openid);

    /**
     * 校验身份证是否唯一
     *
     * @param cardNum 身份证号码
     * @return 结果
     */
    BizUser checkIdCardUnique(String cardNum);

    /**
     * 修改密码
     * @param username 用户名
     * @param password 新密码
     */
    int updatePass(@Param("username") String username, @Param("password") String password);

    /**
     * 修改手机号
     * @param username 用户名
     * @param phone 手机号码
     */
    int updatePhone(@Param("username") String username, @Param("phone") String phone);

    /**
     * 修改用户状态
     * @param user 用户
     */
    int updateUserStatus(BizUser user);

    /**
     * 查询注册用户今日增长
     *
     * @return TableDataInfo
     */
    Integer queryUserTodayIncreaseAmount();


    /**
     * 查询注册用户-活跃用户
     *
     * @return TableDataInfo
     */
    Integer queryUserTodayAmount();

    Integer queryUserEnrollAmount();

    Integer queryVisitSum();

    Integer queryVisitByWechat();

    Integer queryVisitByPc();

    Integer queryDayVisitUp();
}
